﻿using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.Collections.Generic;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category1
{
  public class MT104 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagSequenceDefinition U0002;
    private static SwiftTagDefinition U0003;
    private static SwiftTagSubItemDefinition U0004;
    private static SwiftTagDefinition U0005;
    private static SwiftTagSubItemDefinition U0006;
    private static SwiftTagDefinition U0007;
    private static SwiftTagSubItemDefinition U0008;
    private static SwiftTagSubItemDefinition U000E;
    private static SwiftTagSubItemDefinition U000F;
    private static SwiftTagDefinition U0010;
    private static SwiftTagSubItemDefinition U0011;
    private static SwiftTagDefinition U0012;
    private static SwiftTagSubItemDefinition U0013;
    private static SwiftTagDefinition U0014;
    private static SwiftTagSubItemDefinition U0015;
    private static SwiftTagSubItemDefinition U0016;
    private static SwiftTagChoiceDefinition U0017;
    private static SwiftTagDefinition U0018;
    private static SwiftTagSubItemDefinition U0019;
    private static SwiftTagDefinition U001A;
    private static SwiftTagSubItemDefinition U001B;
    private static SwiftTagChoiceDefinition U001C;
    private static SwiftTagDefinition U001D;
    private static SwiftTagSubItemDefinition U001E;
    private static SwiftTagSubItemDefinition U001F;
    private static SwiftTagSubItemDefinition U007F;
    private static SwiftTagDefinition U0080;
    private static SwiftTagSubItemDefinition U0081;
    private static SwiftTagSubItemDefinition U0082;
    private static SwiftTagSubItemDefinition U0083;
    private static SwiftTagChoiceDefinition U0084;
    private static SwiftTagDefinition U0086;
    private static SwiftTagSubItemDefinition U0087;
    private static SwiftTagSubItemDefinition U0088;
    private static SwiftTagDefinition U0089;
    private static SwiftTagSubItemDefinition U008A;
    private static SwiftTagDefinition U008B;
    private static SwiftTagSubItemDefinition U008C;
    private static SwiftTagSubItemDefinition U008D;
    private static SwiftTagDefinition U008E;
    private static SwiftTagSubItemDefinition U008F;
    private static SwiftTagDefinition U0090;
    private static SwiftTagDefinition U0091;
    private static SwiftTagSubItemDefinition U0092;
    private static SwiftTagDefinition U0093;
    private static SwiftTagSubItemDefinition U0094;
    private static SwiftTagSubItemDefinition U0095;
    private static SwiftTagSubItemDefinition U0096;
    private static SwiftTagSubItemDefinition U0097;
    private static SwiftTagSubItemDefinition U0098;
    private static SwiftTagSubItemDefinition U0099;
    private static SwiftTagSequenceDefinition U009A;
    private static SwiftTagDefinition U009B;
    private static SwiftTagSubItemDefinition U009C;
    private static SwiftTagDefinition U009D;
    private static SwiftTagSubItemDefinition U009E;
    private static SwiftTagSubItemDefinition U009F;
    private static SwiftTagSubItemDefinition U0001U0002;
    private static SwiftTagDefinition U0002U0002;
    private static SwiftTagSubItemDefinition U0003U0002;
    private static SwiftTagDefinition U0004U0002;
    private static SwiftTagSubItemDefinition U0005U0002;
    private static SwiftTagDefinition U0006U0002;
    private static SwiftTagSubItemDefinition U0007U0002;
    private static SwiftTagDefinition U0008U0002;
    private static SwiftTagSubItemDefinition U000EU0002;
    private static SwiftTagSubItemDefinition U000FU0002;
    private static SwiftTagChoiceDefinition U0010U0002;
    private static SwiftTagDefinition U0011U0002;
    private static SwiftTagSubItemDefinition U0012U0002;
    private static SwiftTagDefinition U0013U0002;
    private static SwiftTagSubItemDefinition U0014U0002;
    private static SwiftTagChoiceDefinition U0015U0002;
    private static SwiftTagDefinition U0016U0002;
    private static SwiftTagSubItemDefinition U0017U0002;
    private static SwiftTagSubItemDefinition U0018U0002;
    private static SwiftTagSubItemDefinition U0019U0002;
    private static SwiftTagDefinition U001AU0002;
    private static SwiftTagSubItemDefinition U001BU0002;
    private static SwiftTagSubItemDefinition U001CU0002;
    private static SwiftTagSubItemDefinition U001DU0002;
    private static SwiftTagChoiceDefinition U001EU0002;
    private static SwiftTagDefinition U001FU0002;
    private static SwiftTagSubItemDefinition U007FU0002;
    private static SwiftTagSubItemDefinition U0080U0002;
    private static SwiftTagDefinition U0081U0002;
    private static SwiftTagSubItemDefinition U0082U0002;
    private static SwiftTagDefinition U0083U0002;
    private static SwiftTagSubItemDefinition U0084U0002;
    private static SwiftTagSubItemDefinition U0086U0002;
    private static SwiftTagChoiceDefinition U0087U0002;
    private static SwiftTagDefinition U0088U0002;
    private static SwiftTagSubItemDefinition U0089U0002;
    private static SwiftTagSubItemDefinition U008AU0002;
    private static SwiftTagDefinition U008BU0002;
    private static SwiftTagSubItemDefinition U008CU0002;
    private static SwiftTagDefinition U008DU0002;
    private static SwiftTagSubItemDefinition U008EU0002;
    private static SwiftTagSubItemDefinition U008FU0002;
    private static SwiftTagChoiceDefinition U0090U0002;
    private static SwiftTagDefinition U0091U0002;
    private static SwiftTagSubItemDefinition U0092U0002;
    private static SwiftTagSubItemDefinition U0093U0002;
    private static SwiftTagSubItemDefinition U0094U0002;
    private static SwiftTagDefinition U0095U0002;
    private static SwiftTagSubItemDefinition U0096U0002;
    private static SwiftTagSubItemDefinition U0097U0002;
    private static SwiftTagSubItemDefinition U0098U0002;
    private static SwiftTagDefinition U0099U0002;
    private static SwiftTagDefinition U009AU0002;
    private static SwiftTagSubItemDefinition U009BU0002;
    private static SwiftTagDefinition U009CU0002;
    private static SwiftTagDefinition U009DU0002;
    private static SwiftTagSubItemDefinition U009EU0002;
    private static SwiftTagSubItemDefinition U009FU0002;
    private static SwiftTagDefinition U0001U0003;
    private static SwiftTagSubItemDefinition U0002U0003;
    private static SwiftTagDefinition U0003U0003;
    private static SwiftTagSubItemDefinition U0004U0003;
    private static SwiftTagSubItemDefinition U0005U0003;
    private static SwiftTagDefinition U0006U0003;
    private static SwiftTagSubItemDefinition U0007U0003;
    private static SwiftTagSubItemDefinition U0008U0003;
    private static SwiftTagDefinition U000EU0003;
    private static SwiftTagSubItemDefinition U000FU0003;
    private static SwiftTagSequenceDefinition U0010U0003;
    private static SwiftTagDefinition U0011U0003;
    private static SwiftTagSubItemDefinition U0012U0003;
    private static SwiftTagSubItemDefinition U0013U0003;
    private static SwiftTagDefinition U0014U0003;
    private static SwiftTagSubItemDefinition U0015U0003;
    private static SwiftTagDefinition U0016U0003;
    private static SwiftTagSubItemDefinition U0017U0003;
    private static SwiftTagSubItemDefinition U0018U0003;
    private static SwiftTagDefinition U0019U0003;
    private static SwiftTagSubItemDefinition U001AU0003;
    private static SwiftTagSubItemDefinition U001BU0003;
    private static SwiftTagChoiceDefinition U001CU0003;
    private static SwiftTagDefinition U001DU0003;
    private static SwiftTagSubItemDefinition U001EU0003;
    private static SwiftTagSubItemDefinition U001FU0003;
    private static SwiftTagDefinition U007FU0003;
    private static SwiftTagSubItemDefinition U0080U0003;
    private static SwiftTagSubItemDefinition U0081U0003;

    [Description("General Information")]
    public MT104.SequenceAClass SequenceA
    {
      get
      {
        return new MT104.SequenceAClass((SwiftElement) this, 0, false);
      }
    }

    [Description("Transaction Details")]
    public MT104.SequenceBClass[] SequenceB
    {
      get
      {
        int index = -1;
        List<MT104.SequenceBClass> list = new List<MT104.SequenceBClass>();
        int count;
        do
        {
          ++index;
          MT104.SequenceBClass sequenceBclass = new MT104.SequenceBClass((SwiftElement) this, index, false);
          count = this.ListTags((SwiftElement) sequenceBclass).Count;
          if (count > 0)
            list.Add(sequenceBclass);
        }
        while (count > 0);
        return list.ToArray();
      }
    }

    [Description("Settlement Details")]
    public MT104.SequenceCClass SequenceC
    {
      get
      {
        MT104.SequenceCClass sequenceCclass = new MT104.SequenceCClass((SwiftElement) this, 0, false);
        if (this.ListTags((SwiftElement) sequenceCclass).Count > 0)
          return sequenceCclass;
        else
          return (MT104.SequenceCClass) null;
      }
    }

    public MT104()
      : base(true)
    {
    }

    public MT104(SwiftMessage message)
      : base(message)
    {
    }

    public MT104.SequenceBClass AddSequenceB()
    {
      return new MT104.SequenceBClass((SwiftElement) this, this.SequenceB.Length, true);
    }

    public void RemoveSequenceB(MT104.SequenceBClass sequence)
    {
      foreach (SwiftTag tag in this.ListTags((SwiftElement) sequence))
        this.RemoveTag(tag);
    }

    public MT104.SequenceCClass AddSequenceC()
    {
      return this.SequenceC ?? new MT104.SequenceCClass((SwiftElement) this, 0, true);
    }

    public void RemoveSequenceC(MT104.SequenceCClass sequence)
    {
      foreach (SwiftTag tag in this.ListTags((SwiftElement) sequence))
        this.RemoveTag(tag);
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT104.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT104.MessageDefinition = new SwiftMessageDefinition("MT104", "Direct Debit and Request for Debit Transfer Message");
      MT104.U0002 = new SwiftTagSequenceDefinition("SequenceA", "General Information");
      MT104.U0003 = new SwiftTagDefinition("SendersReference_A_20", "Sender's Reference");
      MT104.U0003.TagName = ":20:";
      MT104.U0004 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT104.U0003.Elements.Add((SwiftDefinitionElement) MT104.U0004);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0003);
      MT104.U0005 = new SwiftTagDefinition("CustomerSpecifiedReference_A_21R", "Customers Specified Reference");
      MT104.U0005.TagName = ":21R:";
      MT104.U0005.Mandatory = false;
      MT104.U0006 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT104.U0005.Elements.Add((SwiftDefinitionElement) MT104.U0006);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0005);
      MT104.U0007 = new SwiftTagDefinition("InstructionCode_A_23E", "Instruction Code");
      MT104.U0007.TagName = ":23E:";
      MT104.U0007.Mandatory = false;
      MT104.U0008 = new SwiftTagSubItemDefinition("Type", "Type");
      MT104.U0007.Elements.Add((SwiftDefinitionElement) MT104.U0008);
      MT104.U000E = new SwiftTagSubItemDefinition("AdditionalInformation", "Additional Information");
      MT104.U000E.Mandatory = false;
      MT104.U000F = new SwiftTagSubItemDefinition("AdditionalInformation_1", "Additional Information");
      MT104.U000E.Elements.Add((SwiftDefinitionElement) MT104.U000F);
      MT104.U0007.Elements.Add((SwiftDefinitionElement) MT104.U000E);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0007);
      MT104.U0010 = new SwiftTagDefinition("RegistrationReference_A_21E", "Registration Reference");
      MT104.U0010.TagName = ":21E:";
      MT104.U0010.Mandatory = false;
      MT104.U0011 = new SwiftTagSubItemDefinition("RegistrationReference", "Registration Reference");
      MT104.U0010.Elements.Add((SwiftDefinitionElement) MT104.U0011);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0010);
      MT104.U0012 = new SwiftTagDefinition("RequestedExecutionDate_A_30", "Requested Execution Date");
      MT104.U0012.TagName = ":30:";
      MT104.U0013 = new SwiftTagSubItemDefinition("Date", "Date");
      MT104.U0012.Elements.Add((SwiftDefinitionElement) MT104.U0013);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0012);
      MT104.U0014 = new SwiftTagDefinition("SendingInstitution_A_51A", "Sending Institution");
      MT104.U0014.TagName = ":51A:";
      MT104.U0014.Mandatory = false;
      MT104.U0015 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0015.Mandatory = false;
      MT104.U0014.Elements.Add((SwiftDefinitionElement) MT104.U0015);
      MT104.U0016 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0014.Elements.Add((SwiftDefinitionElement) MT104.U0016);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0014);
      MT104.U0017 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U0017.Mandatory = false;
      MT104.U0017.Multiple = true;
      MT104.U0018 = new SwiftTagDefinition("InstructingParty_A_50C", "Instructing Party");
      MT104.U0018.TagName = ":50C:";
      MT104.U0019 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0018.Elements.Add((SwiftDefinitionElement) MT104.U0019);
      MT104.U0017.Elements.Add((SwiftDefinitionElement) MT104.U0018);
      MT104.U001A = new SwiftTagDefinition("InstructingParty_A_50L", "Instructing Party");
      MT104.U001A.TagName = ":50L:";
      MT104.U001B = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U001A.Elements.Add((SwiftDefinitionElement) MT104.U001B);
      MT104.U0017.Elements.Add((SwiftDefinitionElement) MT104.U001A);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0017);
      MT104.U001C = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U001C.Mandatory = false;
      MT104.U001C.Multiple = true;
      MT104.U001D = new SwiftTagDefinition("Creditor_A_50A", "Creditor");
      MT104.U001D.TagName = ":50A:";
      MT104.U001E = new SwiftTagSubItemDefinition("Account", "Account");
      MT104.U001E.Mandatory = false;
      MT104.U001F = new SwiftTagSubItemDefinition("Account_1", "Account");
      MT104.U001E.Elements.Add((SwiftDefinitionElement) MT104.U001F);
      MT104.U001D.Elements.Add((SwiftDefinitionElement) MT104.U001E);
      MT104.U007F = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U001D.Elements.Add((SwiftDefinitionElement) MT104.U007F);
      MT104.U001C.Elements.Add((SwiftDefinitionElement) MT104.U001D);
      MT104.U0080 = new SwiftTagDefinition("Creditor_A_50K", "Creditor");
      MT104.U0080.TagName = ":50K:";
      MT104.U0081 = new SwiftTagSubItemDefinition("Account", "Account");
      MT104.U0081.Mandatory = false;
      MT104.U0082 = new SwiftTagSubItemDefinition("Account_1", "Account");
      MT104.U0081.Elements.Add((SwiftDefinitionElement) MT104.U0082);
      MT104.U0080.Elements.Add((SwiftDefinitionElement) MT104.U0081);
      MT104.U0083 = new SwiftTagSubItemDefinition("NameAndAddress", "Name and Address");
      MT104.U0080.Elements.Add((SwiftDefinitionElement) MT104.U0083);
      MT104.U001C.Elements.Add((SwiftDefinitionElement) MT104.U0080);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U001C);
      MT104.U0084 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U0084.Mandatory = false;
      MT104.U0084.Multiple = true;
      MT104.U0086 = new SwiftTagDefinition("CreditorsBank_A_52A", "Creditors Bank");
      MT104.U0086.TagName = ":52A:";
      MT104.U0087 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0087.Mandatory = false;
      MT104.U0086.Elements.Add((SwiftDefinitionElement) MT104.U0087);
      MT104.U0088 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0086.Elements.Add((SwiftDefinitionElement) MT104.U0088);
      MT104.U0084.Elements.Add((SwiftDefinitionElement) MT104.U0086);
      MT104.U0089 = new SwiftTagDefinition("CreditorsBank_A_52C", "Creditor's Bank");
      MT104.U0089.TagName = ":52C:/";
      MT104.U008A = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0089.Elements.Add((SwiftDefinitionElement) MT104.U008A);
      MT104.U0084.Elements.Add((SwiftDefinitionElement) MT104.U0089);
      MT104.U008B = new SwiftTagDefinition("CreditorsBank_A_52D", "Creditor's Bank");
      MT104.U008B.TagName = ":52D:";
      MT104.U008C = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U008C.Mandatory = false;
      MT104.U008B.Elements.Add((SwiftDefinitionElement) MT104.U008C);
      MT104.U008D = new SwiftTagSubItemDefinition("NameAndAddress", "Name And Address");
      MT104.U008B.Elements.Add((SwiftDefinitionElement) MT104.U008D);
      MT104.U0084.Elements.Add((SwiftDefinitionElement) MT104.U008B);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0084);
      MT104.U008E = new SwiftTagDefinition("TransactionTypeCode_A_26T", "Transaction Type Code");
      MT104.U008E.TagName = ":26T:";
      MT104.U008E.Mandatory = false;
      MT104.U008F = new SwiftTagSubItemDefinition("Type", "Type");
      MT104.U008E.Elements.Add((SwiftDefinitionElement) MT104.U008F);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U008E);
      MT104.U0090 = new SwiftTagDefinition("RegulatoryReporting_A_77B", "Regulatory Reporting");
      MT104.U0090.TagName = ":77B:";
      MT104.U0090.Mandatory = false;
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0090);
      MT104.U0091 = new SwiftTagDefinition("DetailsOfCharges_A_71A", "Details Of Charges");
      MT104.U0091.TagName = ":71A:";
      MT104.U0091.Mandatory = false;
      MT104.U0092 = new SwiftTagSubItemDefinition("Code", "Code");
      MT104.U0091.Elements.Add((SwiftDefinitionElement) MT104.U0092);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0091);
      MT104.U0093 = new SwiftTagDefinition("SenderToReceiverInformation_A_72", "Sender To Receiver Information");
      MT104.U0093.TagName = ":72:";
      MT104.U0093.Mandatory = false;
      MT104.U0094 = new SwiftTagSubItemDefinition("Line1", "Line with a maximum of 35 SWIFT characters having format as /8c/[25x]");
      MT104.U0093.Elements.Add((SwiftDefinitionElement) MT104.U0094);
      MT104.U0095 = new SwiftTagSubItemDefinition("Line2", "Line with a maximum of 35 SWIFT characters having format as /8c/[25x] or [//33x]");
      MT104.U0095.Mandatory = false;
      MT104.U0093.Elements.Add((SwiftDefinitionElement) MT104.U0095);
      MT104.U0096 = new SwiftTagSubItemDefinition("Line3", "Line with a maximum of 35 SWIFT characters having format as /8c/[25x] or [//33x]");
      MT104.U0096.Mandatory = false;
      MT104.U0093.Elements.Add((SwiftDefinitionElement) MT104.U0096);
      MT104.U0097 = new SwiftTagSubItemDefinition("Line4", "Line with a maximum of 35 SWIFT characters having format as /8c/[25x] or [//33x]");
      MT104.U0097.Mandatory = false;
      MT104.U0093.Elements.Add((SwiftDefinitionElement) MT104.U0097);
      MT104.U0098 = new SwiftTagSubItemDefinition("Line5", "Line with a maximum of 35 SWIFT characters having format as /8c/[25x] or [//33x]");
      MT104.U0098.Mandatory = false;
      MT104.U0093.Elements.Add((SwiftDefinitionElement) MT104.U0098);
      MT104.U0099 = new SwiftTagSubItemDefinition("Line6", "Line with a maximum of 35 SWIFT characters having format as /8c/[25x] or [//33x]");
      MT104.U0099.Mandatory = false;
      MT104.U0093.Elements.Add((SwiftDefinitionElement) MT104.U0099);
      MT104.U0002.Elements.Add((SwiftDefinitionElement) MT104.U0093);
      MT104.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT104.U0002);
      MT104.U009A = new SwiftTagSequenceDefinition("SequenceB", "Transaction Details");
      MT104.U009A.Multiple = true;
      MT104.U009B = new SwiftTagDefinition("TransactionReference_B_21", "Transaction Reference");
      MT104.U009B.TagName = ":21:";
      MT104.U009C = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT104.U009B.Elements.Add((SwiftDefinitionElement) MT104.U009C);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U009B);
      MT104.U009D = new SwiftTagDefinition("InstructionCode_B_23E", "Instruction Code");
      MT104.U009D.TagName = ":23E:";
      MT104.U009D.Mandatory = false;
      MT104.U009E = new SwiftTagSubItemDefinition("Type", "Type");
      MT104.U009D.Elements.Add((SwiftDefinitionElement) MT104.U009E);
      MT104.U009F = new SwiftTagSubItemDefinition("AdditionalInformation", "Additional Information");
      MT104.U009F.Mandatory = false;
      MT104.U0001U0002 = new SwiftTagSubItemDefinition("AdditionalInformation_1", "Additional Information");
      MT104.U009F.Elements.Add((SwiftDefinitionElement) MT104.U0001U0002);
      MT104.U009D.Elements.Add((SwiftDefinitionElement) MT104.U009F);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U009D);
      MT104.U0002U0002 = new SwiftTagDefinition("MandateReference_B_21C", "Mandate Reference");
      MT104.U0002U0002.TagName = ":21C:";
      MT104.U0002U0002.Mandatory = false;
      MT104.U0003U0002 = new SwiftTagSubItemDefinition("MandateReference", "Mandate Reference");
      MT104.U0002U0002.Elements.Add((SwiftDefinitionElement) MT104.U0003U0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0002U0002);
      MT104.U0004U0002 = new SwiftTagDefinition("DirectDebitReference_B_21D", "Direct Debit Reference");
      MT104.U0004U0002.TagName = ":21D:";
      MT104.U0004U0002.Mandatory = false;
      MT104.U0005U0002 = new SwiftTagSubItemDefinition("DirectDebitReference", "Direct Debit Reference");
      MT104.U0004U0002.Elements.Add((SwiftDefinitionElement) MT104.U0005U0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0004U0002);
      MT104.U0006U0002 = new SwiftTagDefinition("RegistrationReference_B_21E", "Registration Reference");
      MT104.U0006U0002.TagName = ":21E:";
      MT104.U0006U0002.Mandatory = false;
      MT104.U0007U0002 = new SwiftTagSubItemDefinition("RegistrationReference", "Registration Reference");
      MT104.U0006U0002.Elements.Add((SwiftDefinitionElement) MT104.U0007U0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0006U0002);
      MT104.U0008U0002 = new SwiftTagDefinition("CurrencyAndTransactionAmount_B_32B", "Currency and Transaction Amount");
      MT104.U0008U0002.TagName = ":32B:";
      MT104.U000EU0002 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U0008U0002.Elements.Add((SwiftDefinitionElement) MT104.U000EU0002);
      MT104.U000FU0002 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U0008U0002.Elements.Add((SwiftDefinitionElement) MT104.U000FU0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0008U0002);
      MT104.U0010U0002 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U0010U0002.Mandatory = false;
      MT104.U0010U0002.Multiple = true;
      MT104.U0011U0002 = new SwiftTagDefinition("InstructingParty_B_50C", "Instructing Party");
      MT104.U0011U0002.TagName = ":50C:";
      MT104.U0012U0002 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0011U0002.Elements.Add((SwiftDefinitionElement) MT104.U0012U0002);
      MT104.U0010U0002.Elements.Add((SwiftDefinitionElement) MT104.U0011U0002);
      MT104.U0013U0002 = new SwiftTagDefinition("InstructingParty_B_50L", "Instructing Party");
      MT104.U0013U0002.TagName = ":50L:";
      MT104.U0014U0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0013U0002.Elements.Add((SwiftDefinitionElement) MT104.U0014U0002);
      MT104.U0010U0002.Elements.Add((SwiftDefinitionElement) MT104.U0013U0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0010U0002);
      MT104.U0015U0002 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U0015U0002.Mandatory = false;
      MT104.U0015U0002.Multiple = true;
      MT104.U0016U0002 = new SwiftTagDefinition("Creditor_B_50A", "Creditor");
      MT104.U0016U0002.TagName = ":50A:";
      MT104.U0017U0002 = new SwiftTagSubItemDefinition("Account", "Account");
      MT104.U0017U0002.Mandatory = false;
      MT104.U0018U0002 = new SwiftTagSubItemDefinition("Account_1", "Account");
      MT104.U0017U0002.Elements.Add((SwiftDefinitionElement) MT104.U0018U0002);
      MT104.U0016U0002.Elements.Add((SwiftDefinitionElement) MT104.U0017U0002);
      MT104.U0019U0002 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0016U0002.Elements.Add((SwiftDefinitionElement) MT104.U0019U0002);
      MT104.U0015U0002.Elements.Add((SwiftDefinitionElement) MT104.U0016U0002);
      MT104.U001AU0002 = new SwiftTagDefinition("Creditor_B_50K", "Creditor");
      MT104.U001AU0002.TagName = ":50K:";
      MT104.U001BU0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U001BU0002.Mandatory = false;
      MT104.U001CU0002 = new SwiftTagSubItemDefinition("PartyIdentifier_1", "Party Identifier");
      MT104.U001BU0002.Elements.Add((SwiftDefinitionElement) MT104.U001CU0002);
      MT104.U001AU0002.Elements.Add((SwiftDefinitionElement) MT104.U001BU0002);
      MT104.U001DU0002 = new SwiftTagSubItemDefinition("NameAndAddress", "Name and Address");
      MT104.U001AU0002.Elements.Add((SwiftDefinitionElement) MT104.U001DU0002);
      MT104.U0015U0002.Elements.Add((SwiftDefinitionElement) MT104.U001AU0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0015U0002);
      MT104.U001EU0002 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U001EU0002.Mandatory = false;
      MT104.U001EU0002.Multiple = true;
      MT104.U001FU0002 = new SwiftTagDefinition("CreditorsBank_B_52A", "Creditor's Bank");
      MT104.U001FU0002.TagName = ":52A:";
      MT104.U007FU0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U007FU0002.Mandatory = false;
      MT104.U001FU0002.Elements.Add((SwiftDefinitionElement) MT104.U007FU0002);
      MT104.U0080U0002 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U001FU0002.Elements.Add((SwiftDefinitionElement) MT104.U0080U0002);
      MT104.U001EU0002.Elements.Add((SwiftDefinitionElement) MT104.U001FU0002);
      MT104.U0081U0002 = new SwiftTagDefinition("CreditorsBank_B_52C", "Creditor's Bank");
      MT104.U0081U0002.TagName = ":52C:/";
      MT104.U0082U0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0081U0002.Elements.Add((SwiftDefinitionElement) MT104.U0082U0002);
      MT104.U001EU0002.Elements.Add((SwiftDefinitionElement) MT104.U0081U0002);
      MT104.U0083U0002 = new SwiftTagDefinition("CreditorsBank_B_52D", "Creditor's Bank");
      MT104.U0083U0002.TagName = ":52D:";
      MT104.U0084U0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0084U0002.Mandatory = false;
      MT104.U0083U0002.Elements.Add((SwiftDefinitionElement) MT104.U0084U0002);
      MT104.U0086U0002 = new SwiftTagSubItemDefinition("NameAndAddress", "Name and Address");
      MT104.U0083U0002.Elements.Add((SwiftDefinitionElement) MT104.U0086U0002);
      MT104.U001EU0002.Elements.Add((SwiftDefinitionElement) MT104.U0083U0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U001EU0002);
      MT104.U0087U0002 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U0087U0002.Mandatory = false;
      MT104.U0087U0002.Multiple = true;
      MT104.U0088U0002 = new SwiftTagDefinition("DebtorsBank_B_57A", "Debtor's Bank");
      MT104.U0088U0002.TagName = ":57A:";
      MT104.U0089U0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0089U0002.Mandatory = false;
      MT104.U0088U0002.Elements.Add((SwiftDefinitionElement) MT104.U0089U0002);
      MT104.U008AU0002 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0088U0002.Elements.Add((SwiftDefinitionElement) MT104.U008AU0002);
      MT104.U0087U0002.Elements.Add((SwiftDefinitionElement) MT104.U0088U0002);
      MT104.U008BU0002 = new SwiftTagDefinition("DebtorsBank_B_57C", "Debtor's Bank");
      MT104.U008BU0002.TagName = ":57C:/";
      MT104.U008CU0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U008BU0002.Elements.Add((SwiftDefinitionElement) MT104.U008CU0002);
      MT104.U0087U0002.Elements.Add((SwiftDefinitionElement) MT104.U008BU0002);
      MT104.U008DU0002 = new SwiftTagDefinition("DebtorsBank_B_57D", "Debtor's Bank");
      MT104.U008DU0002.TagName = ":57D:";
      MT104.U008EU0002 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U008EU0002.Mandatory = false;
      MT104.U008DU0002.Elements.Add((SwiftDefinitionElement) MT104.U008EU0002);
      MT104.U008FU0002 = new SwiftTagSubItemDefinition("NameAndAddress", "Name and Address");
      MT104.U008DU0002.Elements.Add((SwiftDefinitionElement) MT104.U008FU0002);
      MT104.U0087U0002.Elements.Add((SwiftDefinitionElement) MT104.U008DU0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0087U0002);
      MT104.U0090U0002 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U0090U0002.Multiple = true;
      MT104.U0091U0002 = new SwiftTagDefinition("Debtor_B_59A", "Debtor");
      MT104.U0091U0002.TagName = ":59A:";
      MT104.U0092U0002 = new SwiftTagSubItemDefinition("Account", "");
      MT104.U0092U0002.Mandatory = false;
      MT104.U0093U0002 = new SwiftTagSubItemDefinition("Account_1", "Party Identifier");
      MT104.U0092U0002.Elements.Add((SwiftDefinitionElement) MT104.U0093U0002);
      MT104.U0091U0002.Elements.Add((SwiftDefinitionElement) MT104.U0092U0002);
      MT104.U0094U0002 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U0091U0002.Elements.Add((SwiftDefinitionElement) MT104.U0094U0002);
      MT104.U0090U0002.Elements.Add((SwiftDefinitionElement) MT104.U0091U0002);
      MT104.U0095U0002 = new SwiftTagDefinition("Debtor_B_59", "Debtor");
      MT104.U0095U0002.TagName = ":59:";
      MT104.U0096U0002 = new SwiftTagSubItemDefinition("Account", "");
      MT104.U0096U0002.Mandatory = false;
      MT104.U0097U0002 = new SwiftTagSubItemDefinition("Account_1", "Account");
      MT104.U0096U0002.Elements.Add((SwiftDefinitionElement) MT104.U0097U0002);
      MT104.U0095U0002.Elements.Add((SwiftDefinitionElement) MT104.U0096U0002);
      MT104.U0098U0002 = new SwiftTagSubItemDefinition("NameAndAddress", "Name and Address");
      MT104.U0095U0002.Elements.Add((SwiftDefinitionElement) MT104.U0098U0002);
      MT104.U0090U0002.Elements.Add((SwiftDefinitionElement) MT104.U0095U0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0090U0002);
      MT104.U0099U0002 = new SwiftTagDefinition("RemittanceInformation_B_70", "Remittance Information");
      MT104.U0099U0002.TagName = ":70:";
      MT104.U0099U0002.Mandatory = false;
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0099U0002);
      MT104.U009AU0002 = new SwiftTagDefinition("TransactionTypeCode_B_26T", "Transaction Type Code");
      MT104.U009AU0002.TagName = ":26T:";
      MT104.U009AU0002.Mandatory = false;
      MT104.U009BU0002 = new SwiftTagSubItemDefinition("Type", "Type");
      MT104.U009AU0002.Elements.Add((SwiftDefinitionElement) MT104.U009BU0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U009AU0002);
      MT104.U009CU0002 = new SwiftTagDefinition("RegulatoryReporting_B_77B", "Regulatory Reporting");
      MT104.U009CU0002.TagName = ":77B:";
      MT104.U009CU0002.Mandatory = false;
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U009CU0002);
      MT104.U009DU0002 = new SwiftTagDefinition("CurrencyOriginalOrderedAmount_B_33B", "Currency/Original Ordered Amount");
      MT104.U009DU0002.TagName = ":33B:";
      MT104.U009DU0002.Mandatory = false;
      MT104.U009EU0002 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U009DU0002.Elements.Add((SwiftDefinitionElement) MT104.U009EU0002);
      MT104.U009FU0002 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U009DU0002.Elements.Add((SwiftDefinitionElement) MT104.U009FU0002);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U009DU0002);
      MT104.U0001U0003 = new SwiftTagDefinition("DetailsOfCharges_B_71A", "Details of Charges");
      MT104.U0001U0003.TagName = ":71A:";
      MT104.U0001U0003.Mandatory = false;
      MT104.U0002U0003 = new SwiftTagSubItemDefinition("Code", "Code");
      MT104.U0001U0003.Elements.Add((SwiftDefinitionElement) MT104.U0002U0003);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0001U0003);
      MT104.U0003U0003 = new SwiftTagDefinition("SendersCharges_B_71F", "Sender's Charges");
      MT104.U0003U0003.TagName = ":71F:";
      MT104.U0003U0003.Mandatory = false;
      MT104.U0004U0003 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U0003U0003.Elements.Add((SwiftDefinitionElement) MT104.U0004U0003);
      MT104.U0005U0003 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U0003U0003.Elements.Add((SwiftDefinitionElement) MT104.U0005U0003);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0003U0003);
      MT104.U0006U0003 = new SwiftTagDefinition("ReceiversCharges_B_71G", "Receiver's Charges");
      MT104.U0006U0003.TagName = ":71G:";
      MT104.U0006U0003.Mandatory = false;
      MT104.U0007U0003 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U0006U0003.Elements.Add((SwiftDefinitionElement) MT104.U0007U0003);
      MT104.U0008U0003 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U0006U0003.Elements.Add((SwiftDefinitionElement) MT104.U0008U0003);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U0006U0003);
      MT104.U000EU0003 = new SwiftTagDefinition("ExchangeRate_B_36", "Exchange Rate");
      MT104.U000EU0003.TagName = ":36:";
      MT104.U000EU0003.Mandatory = false;
      MT104.U000FU0003 = new SwiftTagSubItemDefinition("Rate", "Rate");
      MT104.U000EU0003.Elements.Add((SwiftDefinitionElement) MT104.U000FU0003);
      MT104.U009A.Elements.Add((SwiftDefinitionElement) MT104.U000EU0003);
      MT104.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT104.U009A);
      MT104.U0010U0003 = new SwiftTagSequenceDefinition("SequenceC", "Settlement Details");
      MT104.U0010U0003.Mandatory = false;
      MT104.U0011U0003 = new SwiftTagDefinition("CurrencyAndSettlementAmount_C_32B", "Currency and Settlement Amount");
      MT104.U0011U0003.TagName = ":32B:";
      MT104.U0012U0003 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U0011U0003.Elements.Add((SwiftDefinitionElement) MT104.U0012U0003);
      MT104.U0013U0003 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U0011U0003.Elements.Add((SwiftDefinitionElement) MT104.U0013U0003);
      MT104.U0010U0003.Elements.Add((SwiftDefinitionElement) MT104.U0011U0003);
      MT104.U0014U0003 = new SwiftTagDefinition("SumOfAmounts_C_19", "Sum Of Amounts");
      MT104.U0014U0003.TagName = ":19:";
      MT104.U0014U0003.Mandatory = false;
      MT104.U0015U0003 = new SwiftTagSubItemDefinition("Amount", "");
      MT104.U0014U0003.Elements.Add((SwiftDefinitionElement) MT104.U0015U0003);
      MT104.U0010U0003.Elements.Add((SwiftDefinitionElement) MT104.U0014U0003);
      MT104.U0016U0003 = new SwiftTagDefinition("SumOfSendersCharges_C_71F", "Sum Of Sender's Charges");
      MT104.U0016U0003.TagName = ":71F:";
      MT104.U0016U0003.Mandatory = false;
      MT104.U0017U0003 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U0016U0003.Elements.Add((SwiftDefinitionElement) MT104.U0017U0003);
      MT104.U0018U0003 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U0016U0003.Elements.Add((SwiftDefinitionElement) MT104.U0018U0003);
      MT104.U0010U0003.Elements.Add((SwiftDefinitionElement) MT104.U0016U0003);
      MT104.U0019U0003 = new SwiftTagDefinition("SumOfReceiversCharges_C_71G", "Sum Of Receiver's Charges");
      MT104.U0019U0003.TagName = ":71G:";
      MT104.U0019U0003.Mandatory = false;
      MT104.U001AU0003 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT104.U0019U0003.Elements.Add((SwiftDefinitionElement) MT104.U001AU0003);
      MT104.U001BU0003 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT104.U0019U0003.Elements.Add((SwiftDefinitionElement) MT104.U001BU0003);
      MT104.U0010U0003.Elements.Add((SwiftDefinitionElement) MT104.U0019U0003);
      MT104.U001CU0003 = new SwiftTagChoiceDefinition("Choice", "");
      MT104.U001CU0003.Mandatory = false;
      MT104.U001CU0003.Multiple = true;
      MT104.U001DU0003 = new SwiftTagDefinition("SendersCorrespondent_C_53A", "Sender's Correspondent");
      MT104.U001DU0003.TagName = ":53A:";
      MT104.U001EU0003 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U001EU0003.Mandatory = false;
      MT104.U001DU0003.Elements.Add((SwiftDefinitionElement) MT104.U001EU0003);
      MT104.U001FU0003 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT104.U001DU0003.Elements.Add((SwiftDefinitionElement) MT104.U001FU0003);
      MT104.U001CU0003.Elements.Add((SwiftDefinitionElement) MT104.U001DU0003);
      MT104.U007FU0003 = new SwiftTagDefinition("SendersCorrespondent_C_53B", "Sender's Correspondent");
      MT104.U007FU0003.TagName = ":53B:";
      MT104.U0080U0003 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT104.U0080U0003.Mandatory = false;
      MT104.U007FU0003.Elements.Add((SwiftDefinitionElement) MT104.U0080U0003);
      MT104.U0081U0003 = new SwiftTagSubItemDefinition("Location", "Location");
      MT104.U0081U0003.Mandatory = false;
      MT104.U007FU0003.Elements.Add((SwiftDefinitionElement) MT104.U0081U0003);
      MT104.U001CU0003.Elements.Add((SwiftDefinitionElement) MT104.U007FU0003);
      MT104.U0010U0003.Elements.Add((SwiftDefinitionElement) MT104.U001CU0003);
      MT104.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT104.U0010U0003);
    }

    public class SequenceAClass : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT104.U0002;
        }
      }

      [Description("Sender's Reference")]
      public Tag20 SendersReference_A_20
      {
        get
        {
          return new Tag20((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0003);
        }
      }

      [Description("Sender's Reference")]
      public Tag20 Tag20_SendersReference_A
      {
        get
        {
          return this.SendersReference_A_20;
        }
      }

      [Description("Customers Specified Reference")]
      public Tag21R CustomerSpecifiedReference_A_21R
      {
        get
        {
          return new Tag21R((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0005);
        }
      }

      [Description("Customers Specified Reference")]
      public Tag21R Tag21R_CustomerSpecifiedReference_A
      {
        get
        {
          return this.CustomerSpecifiedReference_A_21R;
        }
      }

      [Description("Instruction Code")]
      public MT104.SequenceAClass.Tag23E InstructionCode_A_23E
      {
        get
        {
          return new MT104.SequenceAClass.Tag23E((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0007);
        }
      }

      [Description("Instruction Code")]
      public MT104.SequenceAClass.Tag23E Tag23E_InstructionCode_A
      {
        get
        {
          return this.InstructionCode_A_23E;
        }
      }

      [Description("Registration Reference")]
      public MT104.SequenceAClass.Tag21E RegistrationReference_A_21E
      {
        get
        {
          return new MT104.SequenceAClass.Tag21E((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0010);
        }
      }

      [Description("Registration Reference")]
      public MT104.SequenceAClass.Tag21E Tag21E_RegistrationReference_A
      {
        get
        {
          return this.RegistrationReference_A_21E;
        }
      }

      [Description("Requested Execution Date")]
      public Tag30 RequestedExecutionDate_A_30
      {
        get
        {
          return new Tag30((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0012);
        }
      }

      [Description("Requested Execution Date")]
      public Tag30 Tag30_RequestedExecutionDate_A
      {
        get
        {
          return this.RequestedExecutionDate_A_30;
        }
      }

      [Description("Sending Institution")]
      public Tag51A SendingInstitution_A_51A
      {
        get
        {
          return new Tag51A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0014);
        }
      }

      [Description("Sending Institution")]
      public Tag51A Tag51A_SendingInstitution_A
      {
        get
        {
          return this.SendingInstitution_A_51A;
        }
      }

      [Description("Instructing Party")]
      public Tag50C InstructingParty_A_50C
      {
        get
        {
          return new Tag50C((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0018);
        }
      }

      [Description("Instructing Party")]
      public Tag50C Tag50C_InstructingParty_A
      {
        get
        {
          return this.InstructingParty_A_50C;
        }
      }

      [Description("Instructing Party")]
      public Tag50L InstructingParty_A_50L
      {
        get
        {
          return new Tag50L((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U001A);
        }
      }

      [Description("Instructing Party")]
      public Tag50L Tag50L_InstructingParty_A
      {
        get
        {
          return this.InstructingParty_A_50L;
        }
      }

      [Description("Creditor")]
      public Tag50A Creditor_A_50A
      {
        get
        {
          return new Tag50A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U001D);
        }
      }

      [Description("Creditor")]
      public Tag50A Tag50A_Creditor_A
      {
        get
        {
          return this.Creditor_A_50A;
        }
      }

      [Description("Creditor")]
      public Tag50K Creditor_A_50K
      {
        get
        {
          return new Tag50K((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0080);
        }
      }

      [Description("Creditor")]
      public Tag50K Tag50K_Creditor_A
      {
        get
        {
          return this.Creditor_A_50K;
        }
      }

      [Description("Creditors Bank")]
      public Tag52A CreditorsBank_A_52A
      {
        get
        {
          return new Tag52A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0086);
        }
      }

      [Description("Creditors Bank")]
      public Tag52A Tag52A_CreditorsBank_A
      {
        get
        {
          return this.CreditorsBank_A_52A;
        }
      }

      [Description("Creditor's Bank")]
      public Tag52C CreditorsBank_A_52C
      {
        get
        {
          return new Tag52C((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0089);
        }
      }

      [Description("Creditor's Bank")]
      public Tag52C Tag52C_CreditorsBank_A
      {
        get
        {
          return this.CreditorsBank_A_52C;
        }
      }

      [Description("Creditor's Bank")]
      public Tag52D CreditorsBank_A_52D
      {
        get
        {
          return new Tag52D((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U008B);
        }
      }

      [Description("Creditor's Bank")]
      public Tag52D Tag52D_CreditorsBank_A
      {
        get
        {
          return this.CreditorsBank_A_52D;
        }
      }

      [Description("Transaction Type Code")]
      public Tag26T TransactionTypeCode_A_26T
      {
        get
        {
          return new Tag26T((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U008E);
        }
      }

      [Description("Transaction Type Code")]
      public Tag26T Tag26T_TransactionTypeCode_A
      {
        get
        {
          return this.TransactionTypeCode_A_26T;
        }
      }

      [Description("Regulatory Reporting")]
      public Tag77B RegulatoryReporting_A_77B
      {
        get
        {
          return new Tag77B((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0090);
        }
      }

      [Description("Regulatory Reporting")]
      public Tag77B Tag77B_RegulatoryReporting_A
      {
        get
        {
          return this.RegulatoryReporting_A_77B;
        }
      }

      [Description("Details Of Charges")]
      public MT104.SequenceAClass.Tag71A DetailsOfCharges_A_71A
      {
        get
        {
          return new MT104.SequenceAClass.Tag71A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0091);
        }
      }

      [Description("Details Of Charges")]
      public MT104.SequenceAClass.Tag71A Tag71A_DetailsOfCharges_A
      {
        get
        {
          return this.DetailsOfCharges_A_71A;
        }
      }

      [Description("Sender To Receiver Information")]
      public Tag72 SenderToReceiverInformation_A_72
      {
        get
        {
          return new Tag72((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0093);
        }
      }

      [Description("Sender To Receiver Information")]
      public Tag72 Tag72_SenderToReceiverInformation_A
      {
        get
        {
          return this.SenderToReceiverInformation_A_72;
        }
      }

      internal SequenceAClass(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }

      public class Tag23E : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("23E", value);
          }
        }

        internal Tag23E(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag21E : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("21E", value);
          }
        }

        internal Tag21E(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag71A : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("71A", value);
          }
        }

        internal Tag71A(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }
    }

    public class SequenceBClass : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT104.U009A;
        }
      }

      [Description("Transaction Reference")]
      public Tag21 TransactionReference_B_21
      {
        get
        {
          return new Tag21((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U009B);
        }
      }

      [Description("Transaction Reference")]
      public Tag21 Tag21_TransactionReference_B
      {
        get
        {
          return this.TransactionReference_B_21;
        }
      }

      [Description("Instruction Code")]
      public MT104.SequenceBClass.Tag23E InstructionCode_B_23E
      {
        get
        {
          return new MT104.SequenceBClass.Tag23E((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U009D);
        }
      }

      [Description("Instruction Code")]
      public MT104.SequenceBClass.Tag23E Tag23E_InstructionCode_B
      {
        get
        {
          return this.InstructionCode_B_23E;
        }
      }

      [Description("Mandate Reference")]
      public MT104.SequenceBClass.Tag21C MandateReference_B_21C
      {
        get
        {
          return new MT104.SequenceBClass.Tag21C((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0002U0002);
        }
      }

      [Description("Mandate Reference")]
      public MT104.SequenceBClass.Tag21C Tag21C_MandateReference_B
      {
        get
        {
          return this.MandateReference_B_21C;
        }
      }

      [Description("Direct Debit Reference")]
      public MT104.SequenceBClass.Tag21D DirectDebitReference_B_21D
      {
        get
        {
          return new MT104.SequenceBClass.Tag21D((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0004U0002);
        }
      }

      [Description("Direct Debit Reference")]
      public MT104.SequenceBClass.Tag21D Tag21D_DirectDebitReference_B
      {
        get
        {
          return this.DirectDebitReference_B_21D;
        }
      }

      [Description("Registration Reference")]
      public MT104.SequenceBClass.Tag21E RegistrationReference_B_21E
      {
        get
        {
          return new MT104.SequenceBClass.Tag21E((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0006U0002);
        }
      }

      [Description("Registration Reference")]
      public MT104.SequenceBClass.Tag21E Tag21E_RegistrationReference_B
      {
        get
        {
          return this.RegistrationReference_B_21E;
        }
      }

      [Description("Currency and Transaction Amount")]
      public Tag32B CurrencyAndTransactionAmount_B_32B
      {
        get
        {
          return new Tag32B((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0008U0002);
        }
      }

      [Description("Currency and Transaction Amount")]
      public Tag32B Tag32B_CurrencyAndTransactionAmount_B
      {
        get
        {
          return this.CurrencyAndTransactionAmount_B_32B;
        }
      }

      [Description("Instructing Party")]
      public Tag50C InstructingParty_B_50C
      {
        get
        {
          return new Tag50C((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0011U0002);
        }
      }

      [Description("Instructing Party")]
      public Tag50C Tag50C_InstructingParty_B
      {
        get
        {
          return this.InstructingParty_B_50C;
        }
      }

      [Description("Instructing Party")]
      public Tag50L InstructingParty_B_50L
      {
        get
        {
          return new Tag50L((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0013U0002);
        }
      }

      [Description("Instructing Party")]
      public Tag50L Tag50L_InstructingParty_B
      {
        get
        {
          return this.InstructingParty_B_50L;
        }
      }

      [Description("Creditor")]
      public Tag50A Creditor_B_50A
      {
        get
        {
          return new Tag50A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0016U0002);
        }
      }

      [Description("Creditor")]
      public Tag50A Tag50A_Creditor_B
      {
        get
        {
          return this.Creditor_B_50A;
        }
      }

      [Description("Creditor")]
      public MT104.SequenceBClass.Tag50K Creditor_B_50K
      {
        get
        {
          return new MT104.SequenceBClass.Tag50K((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U001AU0002);
        }
      }

      [Description("Creditor")]
      public MT104.SequenceBClass.Tag50K Tag50K_Creditor_B
      {
        get
        {
          return this.Creditor_B_50K;
        }
      }

      [Description("Creditor's Bank")]
      public Tag52A CreditorsBank_B_52A
      {
        get
        {
          return new Tag52A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U001FU0002);
        }
      }

      [Description("Creditor's Bank")]
      public Tag52A Tag52A_CreditorsBank_B
      {
        get
        {
          return this.CreditorsBank_B_52A;
        }
      }

      [Description("Creditor's Bank")]
      public Tag52C CreditorsBank_B_52C
      {
        get
        {
          return new Tag52C((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0081U0002);
        }
      }

      [Description("Creditor's Bank")]
      public Tag52C Tag52C_CreditorsBank_B
      {
        get
        {
          return this.CreditorsBank_B_52C;
        }
      }

      [Description("Creditor's Bank")]
      public Tag52D CreditorsBank_B_52D
      {
        get
        {
          return new Tag52D((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0083U0002);
        }
      }

      [Description("Creditor's Bank")]
      public Tag52D Tag52D_CreditorsBank_B
      {
        get
        {
          return this.CreditorsBank_B_52D;
        }
      }

      [Description("Debtor's Bank")]
      public Tag57A DebtorsBank_B_57A
      {
        get
        {
          return new Tag57A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0088U0002);
        }
      }

      [Description("Debtor's Bank")]
      public Tag57A Tag57A_DebtorsBank_B
      {
        get
        {
          return this.DebtorsBank_B_57A;
        }
      }

      [Description("Debtor's Bank")]
      public Tag57C DebtorsBank_B_57C
      {
        get
        {
          return new Tag57C((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U008BU0002);
        }
      }

      [Description("Debtor's Bank")]
      public Tag57C Tag57C_DebtorsBank_B
      {
        get
        {
          return this.DebtorsBank_B_57C;
        }
      }

      [Description("Debtor's Bank")]
      public Tag57D DebtorsBank_B_57D
      {
        get
        {
          return new Tag57D((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U008DU0002);
        }
      }

      [Description("Debtor's Bank")]
      public Tag57D Tag57D_DebtorsBank_B
      {
        get
        {
          return this.DebtorsBank_B_57D;
        }
      }

      [Description("Debtor")]
      public Tag59A Debtor_B_59A
      {
        get
        {
          return new Tag59A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0091U0002);
        }
      }

      [Description("Debtor")]
      public Tag59A Tag59A_Debtor_B
      {
        get
        {
          return this.Debtor_B_59A;
        }
      }

      [Description("Debtor")]
      public MT104.SequenceBClass.Tag59 Debtor_B_59
      {
        get
        {
          return new MT104.SequenceBClass.Tag59((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0095U0002);
        }
      }

      [Description("Debtor")]
      public MT104.SequenceBClass.Tag59 Tag59_Debtor_B
      {
        get
        {
          return this.Debtor_B_59;
        }
      }

      [Description("Remittance Information")]
      public Tag70 RemittanceInformation_B_70
      {
        get
        {
          return new Tag70((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0099U0002);
        }
      }

      [Description("Remittance Information")]
      public Tag70 Tag70_RemittanceInformation_B
      {
        get
        {
          return this.RemittanceInformation_B_70;
        }
      }

      [Description("Transaction Type Code")]
      public Tag26T TransactionTypeCode_B_26T
      {
        get
        {
          return new Tag26T((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U009AU0002);
        }
      }

      [Description("Transaction Type Code")]
      public Tag26T Tag26T_TransactionTypeCode_B
      {
        get
        {
          return this.TransactionTypeCode_B_26T;
        }
      }

      [Description("Regulatory Reporting")]
      public Tag77B RegulatoryReporting_B_77B
      {
        get
        {
          return new Tag77B((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U009CU0002);
        }
      }

      [Description("Regulatory Reporting")]
      public Tag77B Tag77B_RegulatoryReporting_B
      {
        get
        {
          return this.RegulatoryReporting_B_77B;
        }
      }

      [Description("Currency/Original Ordered Amount")]
      public Tag33B CurrencyOriginalOrderedAmount_B_33B
      {
        get
        {
          return new Tag33B((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U009DU0002);
        }
      }

      [Description("Currency/Original Ordered Amount")]
      public Tag33B Tag33B_CurrencyOriginalOrderedAmount_B
      {
        get
        {
          return this.CurrencyOriginalOrderedAmount_B_33B;
        }
      }

      [Description("Details of Charges")]
      public MT104.SequenceBClass.Tag71A DetailsOfCharges_B_71A
      {
        get
        {
          return new MT104.SequenceBClass.Tag71A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0001U0003);
        }
      }

      [Description("Details of Charges")]
      public MT104.SequenceBClass.Tag71A Tag71A_DetailsOfCharges_B
      {
        get
        {
          return this.DetailsOfCharges_B_71A;
        }
      }

      [Description("Sender's Charges")]
      public Tag71F SendersCharges_B_71F
      {
        get
        {
          return new Tag71F((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0003U0003);
        }
      }

      [Description("Sender's Charges")]
      public Tag71F Tag71F_SendersCharges_B
      {
        get
        {
          return this.SendersCharges_B_71F;
        }
      }

      [Description("Receiver's Charges")]
      public Tag71G ReceiversCharges_B_71G
      {
        get
        {
          return new Tag71G((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0006U0003);
        }
      }

      [Description("Receiver's Charges")]
      public Tag71G Tag71G_ReceiversCharges_B
      {
        get
        {
          return this.ReceiversCharges_B_71G;
        }
      }

      [Description("Exchange Rate")]
      public Tag36 ExchangeRate_B_36
      {
        get
        {
          return new Tag36((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U000EU0003);
        }
      }

      [Description("Exchange Rate")]
      public Tag36 Tag36_ExchangeRate_B
      {
        get
        {
          return this.ExchangeRate_B_36;
        }
      }

      internal SequenceBClass(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }

      public class Tag23E : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("23E", value);
          }
        }

        internal Tag23E(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag21C : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("21C", value);
          }
        }

        internal Tag21C(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag21D : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("21D", value);
          }
        }

        internal Tag21D(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag21E : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("21E", value);
          }
        }

        internal Tag21E(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag50K : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("50K", value);
          }
        }

        internal Tag50K(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag59 : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("59", value);
          }
        }

        internal Tag59(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }

      public class Tag71A : SwiftTagWrapper
      {
        public string Value
        {
          get
          {
            return this.GetValue();
          }
          set
          {
            this.SetValue("71A", value);
          }
        }

        internal Tag71A(SwiftElement parent, int index, SwiftDefinitionElement definition)
          : base(parent, index, definition)
        {
        }
      }
    }

    public class SequenceCClass : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT104.U0010U0003;
        }
      }

      [Description("Currency and Settlement Amount")]
      public Tag32B CurrencyAndSettlementAmount_C_32B
      {
        get
        {
          return new Tag32B((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0011U0003);
        }
      }

      [Description("Currency and Settlement Amount")]
      public Tag32B Tag32B_CurrencyAndSettlementAmount_C
      {
        get
        {
          return this.CurrencyAndSettlementAmount_C_32B;
        }
      }

      [Description("Sum Of Amounts")]
      public Tag19 SumOfAmounts_C_19
      {
        get
        {
          return new Tag19((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0014U0003);
        }
      }

      [Description("Sum Of Amounts")]
      public Tag19 Tag19_SumOfAmounts_C
      {
        get
        {
          return this.SumOfAmounts_C_19;
        }
      }

      [Description("Sum Of Sender's Charges")]
      public Tag71F SumOfSendersCharges_C_71F
      {
        get
        {
          return new Tag71F((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0016U0003);
        }
      }

      [Description("Sum Of Sender's Charges")]
      public Tag71F Tag71F_SumOfSendersCharges_C
      {
        get
        {
          return this.SumOfSendersCharges_C_71F;
        }
      }

      [Description("Sum Of Receiver's Charges")]
      public Tag71G SumOfReceiversCharges_C_71G
      {
        get
        {
          return new Tag71G((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U0019U0003);
        }
      }

      [Description("Sum Of Receiver's Charges")]
      public Tag71G Tag71G_SumOfReceiversCharges_C
      {
        get
        {
          return this.SumOfReceiversCharges_C_71G;
        }
      }

      [Description("Sender's Correspondent")]
      public Tag53A SendersCorrespondent_C_53A
      {
        get
        {
          return new Tag53A((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U001DU0003);
        }
      }

      [Description("Sender's Correspondent")]
      public Tag53A Tag53A_SendersCorrespondent_C
      {
        get
        {
          return this.SendersCorrespondent_C_53A;
        }
      }

      [Description("Sender's Correspondent")]
      public Tag53B SendersCorrespondent_C_53B
      {
        get
        {
          return new Tag53B((SwiftElement) this, 0, (SwiftDefinitionElement) MT104.U007FU0003);
        }
      }

      [Description("Sender's Correspondent")]
      public Tag53B Tag53B_SendersCorrespondent_C
      {
        get
        {
          return this.SendersCorrespondent_C_53B;
        }
      }

      internal SequenceCClass(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }
    }
  }
}
